﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BL;
using System.Web.Security;

namespace SFsoftSite.Cadastros
{
    public partial class CadastroJogos : System.Web.UI.Page
    {

        #region Atributos

        private BL.BLJogos _blJogos;

        #endregion 

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Roles.IsUserInRole("Admin"))
                Response.Redirect("~/Login.aspx");

            this.Form.Enctype = "multipart/form-data";

            _blJogos = new BLJogos();

            if (!IsPostBack)
            {
                GridView1.DataSource = _blJogos.GetJogos();
                GridView1.DataBind();
            }
         
        }

        protected void DeleteRecord(object sender, GridViewDeleteEventArgs e)
        {
            string autoid = GridView1.DataKeys[e.RowIndex].Value.ToString();

            if (_blJogos.DeleteJogo(Convert.ToInt32(autoid)))
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('O jogo foi excluído com sucesso!')", true);
                AtualizaGrid();
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('Não foi possível excluir o jogo pois existem clientes que possuem esse jogo!')", true);
       
            }
            
        }

        protected void EditRecord(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            AtualizaGrid();
        }

        protected void UpdateRecord(object sender, GridViewUpdateEventArgs e)
        {
            //string autoid = GridView1.DataKeys[e.RowIndex].Value.ToString();


            GridViewRow row = GridView1.Rows[e.RowIndex];


            int autoid = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());


            //TextBox txtIdProdutora = (TextBox)row.FindControl("txtPageName");
            var produtora = ((DropDownList) row.FindControl("txtProdutora")).SelectedValue;
            var categoria = ((DropDownList)row.FindControl("txtCategoria")).SelectedValue;

            var descricao = ((TextBox) row.FindControl("txtDescricaoGrid")).Text;
            var preco =  Convert.ToDouble((( (TextBox)row.FindControl("txtPrecoGrid")).Text));

            TextBox txtTitulo = (TextBox)row.FindControl("txtPageDesc");

            TextBox txtImagem = (TextBox)row.FindControl("txtImagem");


            var produtoraID = Convert.ToInt32(produtora);
            var categoriaID = Convert.ToInt32(categoria);
            
            var titulo = txtTitulo.Text;
            var imagem = txtImagem.Text;

            if (_blJogos.UpdateJogo(autoid, produtoraID, titulo, imagem, descricao, categoriaID, preco))
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('O jogo foi atualizado com sucesso!')", true);
               
                GridView1.EditIndex = -1;

                GridView1.DataBind();

                AtualizaGrid();
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('Não foi possível atualizar os dados. Reveja-os.')", true);
                
            }
          
        }

        protected void CancelRecord(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            
            GridView1.DataBind();

            AtualizaGrid();
        }

        protected void CadastrarJogo(object sender, EventArgs e)
        {

            bool imageGravada = false;
            var imagePath = "";

            //CAdastrar jogo
            var mensagem = string.Empty;

            if (FileUpload1.HasFile)
            {
                imagePath = Server.MapPath("~/Resources/Images/Upload/Games/" + FileUpload1.FileName);

                FileUpload1.SaveAs(imagePath);

                imageGravada = true;
            }
            else
            {
                mensagem = "Selecione uma imagem!";
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert(' " + mensagem + "')", true);
            }
           

            if (imageGravada)
            {
                bool erro = false;
               
                var produtora = Convert.ToInt32(ddlProdutora.SelectedValue);
                var categoria = Convert.ToInt32(ddlCategoria.SelectedValue);
                double preco = 0;

                try
                {
                    preco = Convert.ToDouble(txtPreco.Text);
                }
                catch
                {
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('O campo de preço deve ser númerico!')", true);
                    return;
                }
               
                if (string.IsNullOrEmpty(txtDescricao.Text))
                {
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('É necessário preencher a descrição do jogo!')", true);
                    return;
                }

                if (string.IsNullOrEmpty(txtTitulo.Text))
                {
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('O nome do jogo deve ser preenchido!')", true);
                    return;
                }
                
                var descricao = txtDescricao.Text;
                var titulo = txtTitulo.Text;

                try
                {
                    _blJogos.InsertJogos(produtora, titulo, FileUpload1.FileName, descricao, categoria, preco);
                    AtualizaGrid();
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('O jogo foi cadastrado com sucesso!')", true);
                }
                catch (Exception)
                {
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "Mensagem", "alert('Não foi cadastrar o jogo! Por favor verifique estrutura de tabelas.')", true);
                }
               
            }
        }

        private void AtualizaGrid()
        {
            GridView1.DataSource = _blJogos.GetJogos();
            GridView1.DataBind();
        }
       
    }
}